package comandos;

import java.util.ArrayList;

import model.ModeloAmigosEnComun;
import model.Usuario;
import protocol.MensajeComando;
import client.ClienteSession;

public class AmigosEnComun implements ComandoCliente
{
	private MensajeComando estadoOperacion;
	private static ArrayList<Usuario> amigosEnComun;
	private Usuario usuarioUno;
	private Usuario usuarioDos;
	private final Object lock = new Object();
	
	@SuppressWarnings("unchecked")
	public void ejecutar (ClienteSession cliente, boolean invocadoPorServidor)
	{
		if (invocadoPorServidor)
		{
			try
			{// Recibo la lista de amigos
				synchronized (lock) {
					AmigosEnComun.amigosEnComun = (ArrayList<Usuario>) cliente.getInput().readObject();
					lock.notify();
				}				
			}catch (Exception e){
				System.out.println(e.getMessage());
			}			
		}else{ //Sino fue invocado por el servidor, estoy buscando usuarios
			try{
				ModeloAmigosEnComun ambos = new ModeloAmigosEnComun(this.usuarioUno, this.usuarioDos);
				
				//Envio un mensaje de peticion de la busqueda de usuarios
				cliente.getOutput().writeObject(new MensajeComando("amigos_en_comun",0));
				cliente.getOutput().flush();
							
				//Envio el usuario uno
				cliente.getOutput().writeObject(ambos);
				cliente.getOutput().flush();
				
			}catch (Exception e) {
				System.out.println(e.getMessage());
			}			
		}
			

	}

	

	public ArrayList<Usuario> getAmigosEnComun() throws InterruptedException {
		synchronized (lock) {
			lock.wait();
			return amigosEnComun;
		}
	}



	public void setAmigosEnComun(ArrayList<Usuario> amigosEnComun) {
		AmigosEnComun.amigosEnComun = amigosEnComun;
	}



	public MensajeComando getEstadoOperacion() {
		return estadoOperacion;
	}

	public void setEstadoOperacion(MensajeComando estadoOperacion) {
		this.estadoOperacion = estadoOperacion;
	}



	public Usuario getUsuarioUno() {
		return usuarioUno;
	}



	public void setUsuarioUno(Usuario usuarioUno) {
		this.usuarioUno = usuarioUno;
	}



	public Usuario getUsuarioDos() {
		return usuarioDos;
	}



	public void setUsuarioDos(Usuario usuarioDos) {
		this.usuarioDos = usuarioDos;
	}

	
	
	
	
}
